<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Spring Boot+WebSocket+广播式</title>
</head>
<body onload="disconnect()">
  <noscript>
    <h2 style="color: #ff0000">貌似你的浏览器不支持websocket</h2>
  </noscript>
  <div>
    <div>
      <button id="connect" onclick="connect();">连接</button>
      <button id="disconnect" disabled="disabled" onclick="disconnect();">断开连接</button>
    </div>
    <div id="conversationDiv">
      <label>输入你的名字</label>
      <input type="text" id="name" />
      <button id="sendName" onclick="sendName();">发送</button>
      <p id="response"></p>
    </div>
  </div>
  <script src="/sockjs.min.js"></script>
  <script src="/stomp.min.js"></script>
  <script src="/jquery.js"></script>
  <script type="text/javascript">
            var stompClient = null;
            function setConnected(connected) {
                document.getElementById('connect').disabled = connected;
                document.getElementById('disconnect').disabled = !connected;
                document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden';
                $('#response').html();
            }
            function connect() {
                // 连接 SockJs 的 endpoint 名称为 "/endpointNasus"
                var socket = new SockJS('/ws/message');
                // 使用 STOMP 子协议的 WebSocket 客户端
                stompClient = Stomp.over(socket);
                stompClient.connect({}, function(frame) {
                    setConnected(true);
                    console.log('Connected: ' + frame);
                    // 通过 stompClient.subscribe 订阅 /nasus/getResponse 目标发送的信息，对应控制器的 SendTo 定义
                    stompClient.subscribe('/subject-topic/index', function(respnose) {
                        // 展示返回的信息，只要订阅了 /nasus/getResponse 目标，都可以接收到服务端返回的信息
                        showResponse("回传消息-->" + respnose.body);
                    });
                });
            }

            function disconnect() {
                // 断开连接
                if (stompClient != null) {
                    stompClient.disconnect();
                }
                setConnected(false);
                console.log("Disconnected");
            }

            function sendName() {
                // 向服务端发送消息
                var name = $('#name').val();
                // 通过 stompClient.send 向 /hello （服务端）发送信息，对应控制器 @MessageMapping 中的定义
                stompClient.send("/test/index", {}, JSON.stringify({
                    'name' : name
                }));
                showResponse("发送消息-->" + name);
            }

            function showResponse(message) {
                // 接收返回的消息
                var response = $("#response");
                response.html(message);
            }
        </script>
</body>
</html>
